package com.xiashitech.sqlparser.sqlvisitor.context;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.NoSuchElementException;

/**
 * 表的字段遍历的上下文，存储遍历过程中需要的变量和依赖。
 */
public class ColumnFinderContext {

    private static ThreadLocal<Deque> finderContext = new ThreadLocal<Deque>(){
        protected Deque initialValue() {
            return new ArrayDeque();
        }
    };

    /**
     * 获取栈顶数据
     */
    public static <V> V getCurrentVar() {
        return (V)finderContext.get().peek();
    }

    /**
     * 将当前数据放入堆栈
     */
    public static <V> void putCurrentVar(V currentVar) {
        if(currentVar != null) {
            finderContext.get().push(currentVar);
        }
    }

    /**
     * 删除栈顶数据并返回
     */
    public static <V> V removeCurrentVar() {
        try {
            return (V)finderContext.get().pop();
        } catch (NoSuchElementException exception) {
            return null;
        }
    }

    public static void refreshCurrentThreadLocal() {
        finderContext.set(new ArrayDeque());
    }
}
